using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;

namespace TestImport.Importeren
{
    public partial class ImporteerPlatoBoeken : Form
    {
        private DataTable dt;
        private String sqlqueryStudent = "INSERT INTO leerling (naam, geboorteDatum, adminCode, straat, gemeente, groepCode)";
        private String conString = @Properties.Settings.Default.TestImportConnectionString;//@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\TEMP\FoxBoekenBis\TestImport\TestImport\PlatoBoeken.mdf;Integrated Security=True;User Instance=True";
        private DB_Connection db;
        private char[] delimiters = { ';', '\t' };
        private StreamReader Readervar;
        private  String[] import_fields;
        private int aantalVelden = 6;
        private bool testOK = false;
        private string padStart = Directory.GetCurrentDirectory();

        string fout;

        public ImporteerPlatoBoeken()
        {
            InitializeComponent();
        }

        private void ImporteerPlatoBoeken_Load(object sender, EventArgs e)
        {
            
            
            dt = new DataTable();
            dt.Columns.Add("Velden");
            dt.Columns.Add("Voorbeeld ");
            dt.Columns.Add("Eerste lijn import");
            dt.Rows.Add("TITEL BOEK", "Algemeen boekhouden");
            dt.Rows.Add("ISBN BOEK", "9789045526775");
            dt.Rows.Add("CATEGORIECODE BOEK", "EC");
            dt.Rows.Add("PRIJS BOEK", "39,50");
            dt.Rows.Add("BESCHIKBAARCODE BOEK", "2");
            dt.Rows.Add("UITGEVERCODE BOEK", "DB");
            

            dgvTest.DataSource = dt;
            dgvTest.Columns[0].Width = 220;
            dgvTest.Columns[1].Width = 200;
            dgvTest.Columns[2].Width = 400;
            //dgvTest.Columns[2].DefaultCellStyle = ;
            dgvTest.ReadOnly = true;
            dgvTest.RowHeadersVisible = false;
        }

        private void btnZoekImportBestand_Click(object sender, EventArgs e)
        {
            //bijwerkenGroepCodes();
            DialogResult antwoord = openFileDialog.ShowDialog();
            if (antwoord == DialogResult.OK)
                txtBestand.Text = openFileDialog.FileName;
        }

        private void btnTestImport_Click(object sender, EventArgs e)
        {
            if (!txtBestand.Text.Equals(""))
            {
                try
                {
                    this.Readervar = new StreamReader(txtBestand.Text);

                    int i = 0;
                    String lijn = Readervar.ReadLine();
                    while ( lijn!=null)
                    {
                        i++;
                        //this.lblTeller.Text = "Berekenen aantal lijnen "+i;
                        lijn = Readervar.ReadLine();
                    }
                    Readervar.Close();
                    progressBar.Maximum = i;
                    lblTest.Text = "Het importbestand bevat " + i+ " aantal lijnen";
                    testOK = true; 

                    this.Readervar = new StreamReader(txtBestand.Text);
                    String kolom_lijn = Readervar.ReadLine();
                    this.import_fields = kolom_lijn.Split(delimiters);
                    if (import_fields.Length != 6)
                    {
                        lblTest.Text = "Importbestand in fout formaat!!! Geen 4 velden!!";
                        testOK = false;
                    }
                    for (int x = 0; x < this.import_fields.Length; x++)
                    {
                        dgvTest.Rows[x].Cells[2].Value = import_fields[x];
                    }
                    Readervar.Close();
                }
                catch (Exception ex) { lblTest.Text = "Het importbestand kan NIET verwerkt worden!! Waarschijnlijk in verkeerd formaat."; }
            }
            else
                lblTest.Text = "Je moet het importbestand nog selecteren!!";
        }

        private void btnImporteer_Click(object sender, EventArgs e)
        {
            if (!testOK) btnTestImport_Click(null, null);
            if (testOK)
            {
                maakKopie();
                try
                {
                    db = new DB_Connection(conString);
                    leerlingTableAdapter.TruncateDummy();
                    String[] waarden;
                    String sqlqueryBegin = sqlqueryStudent;
                    aantalVelden = 6;
                    waarden = new string[aantalVelden];
                    sqlqueryBegin += " VALUES (";
                    String sqlQuery = sqlqueryBegin;
                    int tel = 0;
                    string prijs = "0";
                    try
                    {

                        this.Readervar = new StreamReader(txtBestand.Text);
                        String lijn = Readervar.ReadLine();
                        waarden = lijn.Split(delimiters);

                        while (lijn != null && tel < 20000)
                        {
                            for (int x = 0; x < aantalVelden; x++)
                            {
                                sqlQuery += "'" + waarden[x].Replace("'", "''") + "', ";
                            }
                            sqlQuery = sqlQuery.Substring(0, sqlQuery.Length - 2);
                            sqlQuery += ")";
                            try
                            {
                                db.query(sqlQuery);
                            }
                            catch (Exception) { }
                            progressBar.Value++;
                            lijn = Readervar.ReadLine();
                            if (!lijn.Equals(" ")) waarden = lijn.Split(delimiters);
                            sqlQuery = sqlqueryBegin;
                            tel++;
                        }

                    }
                    catch (Exception ex) { }
                    db.Close();
                    bijwerkenGroepCodes();
                }
                catch (Exception) { }
            }
        }

        private void bijwerkenGroepCodes()
        {
            this.groepTableAdapter.Fill(this.onsBoekenPakketDataSet.Groep);
            string vGroepCode = "";
            DataTable groepen = leerlingTableAdapter.GetDataByUniekeGroepCodes();
            for (int i = 0; i < groepen.Rows.Count; i++)
            {
                vGroepCode = groepen.Rows[i]["groepCode"].ToString() + "  ";
                if (groepBindingSource.Find("groepCode", vGroepCode) < 0)
                    groepTableAdapter.Insert(vGroepCode, "", "", 0, "");
            }

        }

        private void maakKopie()
        {
            bool opnieuw = true;
            int tel = 0;
            while (opnieuw && tel < 5)
            {
                try
                {
                    tel++;
                    SqlConnection.ClearAllPools();
                    string pad = padStart +@"\DBFKopies\DBFKopieImport\PlatoBoeken.mdf";
                    Text = pad;
                    FileInfo fi = new FileInfo(padStart+@"\PlatoBoeken.mdf");
                    fi.CopyTo(pad, true);
                    pad = padStart + @"\DBFKopies\DBFKopieImport\PlatoBoeken_log.ldf";
                    fi = new FileInfo(padStart + @"\PlatoBoeken_log.ldf");
                    fi.CopyTo(pad, true);
                    opnieuw = false;

                }
                catch (Exception ex) {}//MessageBox.Show(ex.Message); }
            }
           

        }
            

       
    }
}